﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using KPWeb.Class;
using KPWeb.Data;
using KPWeb.Function;


namespace KPWeb.KadryPlace
{
    public partial class DokumentyPrzyjete : KPPage
    {
        private bool bCzytnik
        {

            get
            {
                if (ViewState["bCzytnik"] == null) ViewState["bCzytnik"] = true;
                return bool.Parse(ViewState["bCzytnik"].ToString());
            }
            set
            {
                ViewState["bCzytnik"] = value;

            }
        }
        private string barCode
        {

            get
            {
                if (ViewState["barCode"] == null) ViewState["barCode"] = "";
                return ViewState["barCode"].ToString();
            }
            set
            {
                ViewState["barCode"] = value;

            }
        }
        private void komunikaError(int kod, int iT, int iID)
        {
            fError.Visible = true;
            switch (kod)
            {
                case -1: Error1.Visible = true;
                    break;
                case -2: Error2.Visible = true;
                    Error2.Text = Stale.errorBrakDokumentu + iT.ToString() + ", ID= " + iID.ToString();
                    break;
                case -3: Error3.Visible = true;
                    Error3.Text = Stale.errorJuzZarejestrowany + iT.ToString() + ", ID= " + iID.ToString();
                    break;
                case -5: Error5.Visible = true;
                    break;
                case -6: Error6.Visible = true;
                    break;
                 default:  fError.Visible = false;
                    break;
            }
        }

        private int WstawDokument(byte typDokumentuID, int dokumentID,
                  int uprawnieniaID, DateTime dataPrzyjecia, byte stan)
            //stan 0 w tabeli KP_DokumentyPrzyjete oznacza dokument zarejestrowany w KADRACH
        // >0 OK ID nowoutworzonego dokumentu, -1 błąd zapisu, -2 nieobsługiwany typ dokumentu
        {
            int? osobaID = null;
            int tStan = 0;
            switch (typDokumentuID)
            {
                case 1:
                    return (-2);
                case 2:
                    tStan = UrlopyK.GetStanWniosekUrlopowy(dokumentID);
                    if (tStan > 5) return (-3);
                    if (tStan == 0) return (-2);
                    osobaID = UrlopyK.GetOsobaIDWniosekUrlopowy(dokumentID);
                    osobaID = (osobaID == -1 ? null : osobaID);
                    break;
                case 3:
                    return (-2);
                default:
                    return (-2);

            }
            int iT = Dokumenty.InsertDokumentyPrzyjeteTransact(typDokumentuID, osobaID, dokumentID, uprawnieniaID, dataPrzyjecia, 0);
            return iT;
        }
        private void inicBarCode()
        {
            tBarCodeTyp.Text = "";
            tBarCodeID.Text = "";
            barCode = "";
        }
        protected void Page_Load(object sender, EventArgs e)
        {

            Error1.Visible = false;
            Error2.Visible = false;
            Error3.Visible = false;
            Error4.Visible = false;
            Error5.Visible = false;
            Error6.Visible = false;
            fError.Visible = false;

            this.tBarCodeTyp.Focus();
            bCzytnik = cCzytnik.Checked;

            this.bZarejestruj.Enabled = !bCzytnik;
            tBarCodeID.Enabled = !bCzytnik;

            if (tBarCodeTyp.Text.Length == Stale.countDigitsInBarCode)
            {
                barCode = tBarCodeTyp.Text;
                byte iT = byte.Parse(barCode.Substring(0, 2));
                int iID = int.Parse(barCode.Substring(2, 7));
                if (!bCzytnik)
                {
                    tBarCodeTyp.Text = "";
                    fError.Visible = true;
                    Error1.Visible = true;

                    inicBarCode();
                    return;
                }
             
                int iTemp = WstawDokument(iT, iID, int.Parse(Current.UprawnieniaFunkcjaID), DateTime.Now, 0);
                inicBarCode();
                if (iTemp > 0)
                {

                    this.ListView1.DataBind();
                }
                else
                    komunikaError(iTemp, iT, iID);
            }
            //inicBarCode();

            if (!this.IsPostBack)
            {
             //   this.WykazFiltrow.SelectedValue = "dataR";
                this.SzukajLogin.Text = String.Format("{0:yyyy-MM-dd}",DateTime.Now);
                this.hFirmaID.Value = Current.FirmaID;
             //   this.ListView1.DataBind();
            }
        }

        protected void btnSzukaj_Click(object sender, EventArgs e)
        {
            //string strTemp = this.SzukajLogin.Text;
        }
        protected void btnZarejestruj_Click(object sender, EventArgs e)
        {
            byte iT = byte.Parse(tBarCodeTyp.Text);
            int iID = int.Parse(tBarCodeID.Text);
            int iTemp = WstawDokument(iT, iID, int.Parse(Current.UprawnieniaFunkcjaID), DateTime.Now, 0);

            inicBarCode();
            if (iTemp > 0)
            {
                this.ListView1.DataBind();
            }
            else
                komunikaError(iTemp, iT, iID);
        }
        public class A
        {
            public int DokumentID { get; set; }
           public int TypDokumentuID { get; set; }
           public string NazwiskoImie { get; set; }
           public string JednostkaKod { get; set; }
           public string NazwaDokumentu { get; set; }
           public int Stan { get; set; }
        }
        static public IEnumerable<A> PobierzDokumentyNieZarejestrowane()//(string filtr), int firmaID)
        {
            try
            {
                List<A> result = new List<A>();
                //var qDokumentyPrzyjete = from item in DyzuryK.GetListaOsobDyzury(int.Parse(Current.JednostkaID), IDTemp)
                //             select new { item.NazwiskoImie, item.OsobaID, item.Tytul, item.DokumentID };
                //if (filtr == "login")
                //    return (Dokumenty.GetDokumentyPrzyjete(firmaID).ToArray());

                //else
                //    if (szukaj != null)
                        //switch (filtr)
                        //{
                        //  case "wnioski urlopowe":
                                result.AddRange((UrlopyK.GetWnioskiUrlopoweStan(5)//.Where(a =>a.NazwiskoImie.Contains(filtr.Trim()) && a.FirmaID == firmaID)
                                    .Select(a => new A() { DokumentID = a.WnioskiUrlopoweID,
                                                           TypDokumentuID = 2,
                                                           NazwiskoImie = a.NazwiskoImie,
                                                           JednostkaKod = a.JednostkaKod,
                                        NazwaDokumentu = a.TypNieobecnosciUrlopuNazwa, Stan = 5 })));
                            //    break;
                            //case "osobaID":
                            //    return (Dokumenty.GetDokumentyPrzyjete(firmaID).Where(a => a.OsobaID == int.Parse(szukaj.Trim())
                            //          && a.FirmaID == firmaID).OrderByDescending(a => a.DataPrzyjecia).ToArray());
                            //case "jednostka":
                            //    return (Dokumenty.GetDokumentyPrzyjete(firmaID).Where(a => a.JednostkaKod.Trim().ToUpper()
                            //        == szukaj.Trim().ToUpper()).OrderByDescending(a => a.DataPrzyjecia).ToArray());
                            //case "dataR":
                            //    DateTime dt1 = DateTime.Parse(szukaj).Date;
                            //    DateTime dt2 = DateTime.Parse(szukaj).AddDays(1).Date;
                            //    return (Dokumenty.GetDokumentyPrzyjete(firmaID).
                            //        Where(a => a.DataPrzyjecia >= dt1 && a.DataPrzyjecia < dt2).OrderByDescending(a => a.DataPrzyjecia).ToArray());
                            //case "dataRW":
                            //    DateTime dt = DateTime.Parse(szukaj).Date;
                            //    return (Dokumenty.GetDokumentyPrzyjete(firmaID).Where(a => a.DataPrzyjecia >= dt).OrderByDescending(a => a.DataPrzyjecia).ToArray());

                        //    default:
                        //        return (null);
                        //}
                    //else

                        return result.AsEnumerable<A>();


            }
            catch
            {
                return (null);
            }
        }
        static public IEnumerable<vKP_DokumentyPrzyjete> PobierzDokumentyPrzyjete(string filtr, string szukaj, int firmaID)
        {
            try
            {

                if (filtr == "nazwa")
                    return (Dokumenty.GetDokumentyPrzyjete(firmaID).ToArray());

                else
                    if (szukaj != null)
                        switch (filtr)
                        {
                            case "nazwisko":
                                return (Dokumenty.GetDokumentyPrzyjete(firmaID).Where(a => a.NazwiskoImie.Contains(szukaj.Trim())
                                      && a.FirmaID == firmaID).OrderByDescending(a => a.DataPrzyjecia).ToArray());
                            case "osobaID":
                                return (Dokumenty.GetDokumentyPrzyjete(firmaID).Where(a => a.OsobaID == int.Parse(szukaj.Trim())
                                      && a.FirmaID == firmaID).OrderByDescending(a => a.DataPrzyjecia).ToArray());
                            case "jednostka":
                                return (Dokumenty.GetDokumentyPrzyjete(firmaID).Where(a => a.JednostkaKod.Trim().ToUpper()
                                    == szukaj.Trim().ToUpper()).OrderByDescending(a => a.DataPrzyjecia).ToArray());
                            case "dataR":
                                DateTime dt1 = DateTime.Parse(szukaj).Date;
                                DateTime dt2 = DateTime.Parse(szukaj).AddDays(1).Date;
                                return (Dokumenty.GetDokumentyPrzyjete(firmaID).
                                    Where(a => a.DataPrzyjecia >= dt1 && a.DataPrzyjecia < dt2).OrderByDescending(a => a.DataPrzyjecia).ToArray());
                            case "dataRW":
                                DateTime dt = DateTime.Parse(szukaj).Date;
                                return (Dokumenty.GetDokumentyPrzyjete(firmaID).Where(a => a.DataPrzyjecia >= dt).OrderByDescending(a => a.DataPrzyjecia).ToArray());

                            default:
                                return (null);
                        }
                    else

                        return (null);


            }
            catch
            {
                return (null);
            }
        }
        protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            string sTemp = ((Label)e.Item.FindControl("NazwiskoImie")).Text;
            ((Label)e.Item.FindControl("NazwiskoImie")).Text = FunctionGlobal.UppercaseFirstWords(sTemp);

            //string sTemp1 = ((Label)e.Item.FindControl("Tytul")).Text;
            //((Label)e.Item.FindControl("Tytul")).Text = sTemp1.ToLower();
        }
        protected void btnRejestrujClick(object sender, EventArgs e)
        {
            byte iT = byte.Parse(((Label)((Button)sender).Parent.FindControl("typDokumentuID")).Text);
            int iID = int.Parse(((Label)((Button)sender).Parent.FindControl("dokumentID")).Text);
            int iTemp = WstawDokument(iT, iID, int.Parse(Current.UprawnieniaFunkcjaID), DateTime.Now, 0);
            if (iTemp > 0)
            {
                this.ListView1.DataBind();
                this.ListView2.DataBind();
            }
            else
                komunikaError(iTemp, iT, iID);
        }
    }
}